home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 1
/
Cream of the Crop 1.iso
/
PROGRAM
/
MISCC.ARJ
/
DELETE.C
< prev
next >
Wrap
Internet Message Format
|
1992-06-23
|
4KB
From: marks@tekigm2.TEK.COM (Mark D. Salzman)
Newsgroups: comp.sys.ibm.pc
Subject: Deleting files QUICKLY (a solution)
Date: 23 Jul 87 16:16:25 GMT
Keywords: DOS delete
After many replys to my request, here is the one working solution that
was given on how to delete a large number of files QUICKLY from within
a program. That solution is to use the old DOS delete function 13H
with wildcards to specify the files you wish to delete. As usual it
has it's tradeoffs. This function does not understand path
specifications at all. So it can only delete files in the current
directory. It also gets it's speed by using wild cards since it only
has to open the directory file once to do the deletions.
Much thanks goes to Ralf Brown (Ralf.Brown@b.gp.cs.cmu.edu) who showed
me that the DOS "del" command uses this function (along with some code
to change directories if a path is given) to do it's work.
Although many of you suggested going around DOS and mucking with the
directory file and File Allocation Table (FAT) directly, I have not
yet received enough information to do that safely. If anyone has such
information, I would still love to hear it.
Below is a program I wrote to test this function and determine how to
use it.
Enjoy!
Mark D. Salzman Phone (206) 253-5542. | The more complex the mind,
Tektronix Inc., P.O. Box 3500, M/S C1-937 | the greater the need for
Vancouver, Washington. 98668 | the simplicity of play.
{world_at_large}!tektronix!tekigm2!marks | James T. Kirk
############################################################################
/*
* DELETE.C
*
* This program implements the PC/MS-DOS delete function 13h. This is the
* fastest function for deleting large numbers of files as long as the files
* can be specified with wildcards ( *, ? ). As it stands, the program can
* only delete files on the current drive and in the current directory, no
* path names allowed. It will not delete files with special attributes like
* readonly or system. This program is donated to the public domain.
*
* Compile with Microsoft C V4.0 : cl delete.c -o delete
*
* By Mark Salzman, Tektronix Inc.
*/
#include <stdio.h>
#include <dos.h>
struct FCB /* The DOS File Control Block */
{
char exflag; /* Extension active flag byte, FF = active */
char space1[5]; /* Reserved space, normally set to zero */
char attribute; /* File attribute byte */
char drivenum; /* The drive number, also base address of FCB */
char filenam[8]; /* File or device name, left justified space filled */
char fileext[3]; /* File extension */
int block; /* Current block number */
int record; /* Record size */
long size; /* File size in bytes */
int date; /* File date */
char space2[10]; /* Reserved space for DOS control work */
char crecord; /* Current record (<127) */
long rrecord; /* Random record number */
}
main (argc, argv) /* Set up to pass command line arguments */
int argc;
char *argv[];
{
int inc;
if (argc < 2) usage(); /* If no arguments, print usage. */
for(inc=1; inc<argc; inc++)
delete(argv[inc]);
}
int delete(fname)
char *fname; /* File name and extension */
{
union REGS ir, or;
struct FCB tmp;
int i;
tmp.drivenum = 0; /* use current drive */
for(i=0; i<8; i++) tmp.filenam[i] = '\040'; /* Clear FCB name entries */
for(i=0; i<3; i++) tmp.fileext[i] = '\040';
/* Place file name (with wildcards) into FCB */
i = 0;
while((i<8) && (*fname != '\0') && (*fname != '.'))
{
tmp.filenam[i] = *fname;
fname++; i++;
}
if(*fname == '.')
{
fname++;
i = 0;
while((i<3) && (*fname != '\0'))
{
tmp.fileext[i] = *fname;
fname++; i++;
}
}
/* Call DOS to remove the file(s) */
ir.x.ax = 0x1300; /* DOS delete function 13h */
ir.x.dx = (unsigned)(&tmp.drivenum); /* FCB base address */
intdos(&ir, &or); /* Delete all matching file names */
return(or.x.ax); /* Return errors if any */
}
/*
* Print a program usage message, and exit.
*/
usage()
{
printf("\nUSAGE: delete file_name(s)\n\n");
exit(0);
}
##############################################################################